package com.cainiao.controller;


import com.cainiao.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 * @author shkstart
 * @create 2021-08-04 20:59
 */
@Controller
public class ParamController {
    /**
     * 原生 servlet 获取请求参数
     * 形参位置的 request表示当前的请求
     *
     * @param request
     * @return
     */
    @RequestMapping("/testServletAPI")
    public String getParam1(HttpServletRequest request) {
        //HttpSession session = request.getSession();

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);
        return "success";
    }


    /**
     * 通过控制器方法的形参获取请求参数
     * 1. 若请求参数中多次请求参数中出现多个同名的请求参数，可以在控制器方法的形参位置
     * ==》设置字符串类型或者数组类型接收此请求参数。
     * 2. 若使用字符串类型的形参，最终结果为请求参数的每一个指之间使用逗号，进行拼接
     * 3. 若请求参数和形参不一致则获取不了值
     *
     * 注解 @RequestParam 的 required 默认值是 true，表示必须为 value 指定的变量赋值
     * ，如果为 false 则不需要进行赋值。
     * @param username
     * @param password
     * @return
     */
    @RequestMapping(value = "/testParam", method = RequestMethod.GET)
    public String testParam(@RequestParam(
            value = "user_name",
            required = false,
            defaultValue = "zhansan") String username,
                            String password,
                            String[] hobby,
                            @RequestHeader(
                                    value = "host",
                                    required = false,
                                    defaultValue = "localhost:8181") String host) {
        System.out.println(username);
        System.out.println(password);
        System.out.println(Arrays.toString(hobby));
        System.out.println(host);
        return "success";
    }

    /**
     * 通过 pojo获取请求参数
     *
     * @param user
     * @return
     */
    @RequestMapping("/testBean")
    public String testBeran(User user) {
        System.out.println(user);
        return "success";
    }
}
